Para saber si el servidor se está ejecutando buscamos el proceso sshd en la lista de procesos, si el servidor no está en ejecución podemos ejecutarlo con:
#/etc/init.d/ssh start
o con (en sistemas con systemd):
#systemctl start ssh.service
NOTA: Si tenemos problemas y queremos lanzar sshd en modo depuración podemos hacerlo con el comando /usr/sbin/sshd -d
NOTA 2: Siempre que hagamos cambios en el archivo de configuración tendremos que reiniciar el servidor, podemos hacerlo con la opción restart en vez de start
Para configurar el servidor lo hacemos a traves del archivio /etc/ssh/sshd_config
Una de las opciones que tenemos que tener en cuenta al principio es la siguiente:
PasswordAuthentication no
Esta opción determina si podremos usar una contraseña para acceder o si tendremos que tener configurada una clave publica, principalmente estará configurado como "no", si queremos utilizar una contraseña tendremos que poner la opción a "yes"
NOTA: No confundir esta contraseña, que es la contraseña del propio usuario con el que nos vayamos a identificar con la contraseña que podemos tener para nuestra clave privada
El usuario con el que accederemos será uno de los usuarios creados en el servidor, si tenemos deshabilitada la opción de loguearnos con contraseña, tendremos que tener configurada una clave pública dentro de la carpeta del usuario (en el servidor) en: ~/.ssh/authorized_keys
Para utilizar una clave pública para poder acceder al servidor primero tendremos que generar la clave, y despues tendremos que almacenar dicha clave en el servidor.
Para crear la clave lo hacemos con el siguiente comando (lo hacemos desde el cliente):
ssh-keygen
Al ejecutar el comando sin parámetros se ejecutará de manera interactiva, pregundandonos donde queremos guardar las claves y si queremos aplicar una contraseña a la clave privada que se generará, si no indicamos ninguna ruta la que se usará por defecto es ~/.ssh/id_rsa, la clave pública se guardará con el mismo nombre, pero con la terminación .pub, por defecto será id_rsa.pub.
Si hemos indicado una contraseña (passphrase) para proteger nuestra clave privada está contraseña se nos preguntará cada vez que nos conectemos a un servidor y se use dicha clave.
Una vez tenemos generado nuestro par de claves público/privada tendremos que configurar la clave pública en el servidor, para que podamos acceder usando nuestra clave privada, para ello tenemos que crear el siguiente archivo:
/home/<usuario>/.ssh/authorized_keys
<usuario> será el usuario que usaremos para loguearnos, esta será la carpeta donde sshd buscará las claves publicas (según el usuario con el que nos intentemos loguear buscará en la carpeta del propio usuario), si queremos podemos modificar esta carpeta, para indicar una carpeta alternativa modificando en el archivo /etc/ssh/sshd_config la opción:
AuthorizedKeysFile /etc/ssh/keys/%u/authorized_keys
Dentro del archivo authorized_keys colocaremos la clave pública que generamos previamente en el cliente, el contenido del archivo id_rsa.pub
Una vez tenemos hechas todas estas configuraciones en el servidor ya podremos conectarnos desde el cliente.
Para conectarnos desde el cliente usaremos el comando ssh, de la siguiente manera:
ssh usuario@host
Si usamos el comando de esta manera buscará la clave privada en ~/.ssh/id_rsa, que es la ruta donde ssh-keygen nos genera nuestro par de claves por defecto, si queremos indicar una ruta alternativa podemos usar la opción -i:
ssh miUsuario@ejemplo.com -i mi_archivo
Al intentar acceder a un servidor con el comando ssh nos aparece el siguiente error:
Permission denied (publickey)
Si nos encontramos con este error probablemente tendremos un problema con nuestras claves publica/privada, podemos volver a genrar las claves con ssh-keygen en el cliente y volver a cargar la clave publica en el archivo authorized_keys en el servidor para asegurarnos de que estamos usando las claves correctas.
El tunneling nos permite crear una conexión entre un cliente y un servidor y a traves de esta conexión conectar otros protocolos que iran encapsulados dentro de la conexión de ssh, de esta manera los datos viajan seguros y a mayores nos permite realizar una redirección de puertos lo que puede ser util para saltarse el bloqueo de un firewall por ejemplo.
El tunneling lo podemos hacer de manera remota o de manera local.
Si lo hacemos de manera remota nos permitirá poner un puerto a la escucha en el servidor redireccionado al puerto que indiquemos en el cliente, de manera que cualquiera programa del servidor que se conecte de manera local a ese puerto se conectará automáticamente al puerto que hemos indicado de nuestro cliente.
Para hacer una redirección remota lo hacemos con el siguiente comando:
ssh -v -N -R 8083:127.0.0.1:8085 -l usuario 192.168.1.4
Los disinttos parámetros se explican a continuación:
En este caso le estamos diciendo que queremos redireccionar el puerto 8083 del servidor remoto al puerto 8085 de nuestro equipo local, por lo tanto todas las conexiones que se hagan en el servidor remoto al puerto 8083 serán redirigidas a traves de ssh al puerto 8085 de nuestro equipo local
Podemos usar el comando scp para transmitir archivos a traves de ssh.
la sintaxis del comando es la siguiente:
scp archivo_local usuario@host:/ruta_remota
Por ejemplo:
scp ejemplo.txt ejemploUsuario@192.168.1.4:/home/ejemploUsuario/
Si solo indicamos la carpeta de destino el archivo se creará con el mismo nombre que el que tenemos en local
Si queremos copiar carpeta tendremos que usar la opción -r al indicar una carpeta, si no lo hacemos obtendremos un error como el siguiente:
carpetaTest: not a regular file
Un ejemplo sería el siguiente:
scp -r carpetaTest ejemploUsuario@192.168.1.4:/home/ejemploUsuario/
Aclaración: Si queremos usar el parámetro -i para indicar una clave privada alternativa a la por defecto tendremos que usar este parámetro antes de indicar los archivos a envíar en la linea de comandos, si usamos el parámetro -i al final despues de haber indicado los archivos el comando no funcionará.
Cuando queremos pasar un archivo tenemos que tener en cuenta que la ruta del servidor de destino se indica desde la raíz del sistema, un error tipico es el siguiente:
scp ejemplo.txt ejemploUsuario@192.168.1.4:/
Ese comando intentará copiar el archivo ejemplo.txt en la carpeta raiz / y como el usuario ejemploUsuario no tiene permisos para escribir en esa carpeta obtendremos el siguiente error:
scp: /ejemplo.txt: Permission denied
Normalmente intentaremos escribir siempre en la carpeta del usuario con el que nos estamos conectando, podemos usar el caracter "~" para acceder directamente a la carpeta del usuario, el comando anterior sería así:
scp ejemplo.txt ejemploUsuario@192.168.1.4:~/
SSH | OpenSSH | SCP | Tunneling